<?php
/**
 * Category
 *
 * Обработка данных категорий
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class Category extends ActiveRecord {
	protected $tableName = 'category';
	public $pkName = 'ID_category';
	
	protected $arrWysiwyg = array('text');
	
	protected $arrSettings = array(
			'created_at' => true,  // в БД храним время создания
			'updated_at' => true, 	// в БД храним время редактирования
			'author' => true			// в БД храним автора (ID_user)
	);
	
	public $validatesLengthOf = array(
			'category_name' => array('minimum' => 2, 'maximum' => 128, 'message' => 'название категории  должно состоять из 2-128 символов'),
			'url' => array('minimum' => 2, 'maximum' => 128, 'message' => 'url должен состоять из 2-128 символов'),
			'title' => array('minimum' => 2, 'maximum' => 128, 'message' => 'meta-title должен состоять из 2-128 символов'),
			'text' => array('minimum' => 2, 'message' => 'текст должен быть заполнен'),
	);
	
	public $validatesFormatOf = array(
			'url' => array('message' => 'URL введен неверно', 'with' => '|^[\-_A-Za-z0-9\.]+$|', 'allowNull' => true)
	);
	
	public $validatesUniquenessOf = array(
			'url' => array('message' => 'Такой URL уже используется', 'allowOneNull' => true)
	);
	
	/**
	 * (non-PHPdoc)
	 * @see ActiveRecord::beforeDelete()
	 */
	public function beforeDelete() {
		Service_Debug::setDebug();
		if (!$this->id) return false;
		$objDB = Service_Database::instance();
		// Системные статьи нельзя удалить
		$stmt = "SELECT `is_system` FROM `category` WHERE `ID_category` = '" . $this->id . "'";
		return !$objDB->selectSimpleField($stmt);
	}
	
	/**
	 * (non-PHPdoc)
	 * @see ActiveRecord::beforeValidation()
	 */
	public function beforeValidation() {
		Service_Debug::setDebug();
		if (!empty($this->tableFields['url'])) {
			if (in_array($this->tableFields['url'], $this->arrSystemWords)) {
				$arrTemp = array();
				$this->errorValidated('url', $arrTemp, 'данный URL является системным - его нельзя использовать');
			}
		}
		//Удаляем из сохраняемого массива поля с пустыми значениями
		$arrCheck = $this->tableFields;
		foreach ($arrCheck as $key => $value)
			if ($value=='') $arrCheck[$key] = null;
		$this->tableFields = $arrCheck;
	}
	
	/**
	 * Метод возвращает массив категорий из БД
	 *
	 *@return array - массив категорий 
	 */
	public static function getList () {
		$objDB = Service_Database::instance();
		$stmt = "SELECT `category`.`category_name`,`category`.`ID_category`, `category`.`url`
		FROM `category`
		ORDER BY `category`.`category_name` ASC";
		$arrCategories = $objDB->select($stmt);
		return $arrCategories;
	}
	
	/**
	 * Метод возвращает массив данных о мастерах категории
	 */
	public function getArrMasters () {
		$objDB = Service_Database::instance();
		$stmt = "SELECT `user_category`.`ID_user`,`user`.`first_name`,`user`.`last_name`
				 FROM `user_category`
				 INNER JOIN `user` USING(`ID_user`)
				 WHERE `user_category`.`ID_category`='" . $this->id . "' AND `user`.`user_type`='master'";
		$arrMasters = $objDB->select($stmt);
		return $arrMasters;
	}
	
	/**
	 * Получает id категории по её url
	 *
	 * @param string $categoryUrl - url категории
	 */
	public static function getId($categoryUrl) {
		Service_Debug::setDebug();
		$objDB = Service_Database::instance();
		$stmt = "SELECT `ID_category` FROM `category` WHERE `url` = '" . Service_Escape::absolutelyEscapeString($categoryUrl) . "'";
		return $objDB->selectSimpleField($stmt);
	}
}
?>